﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace ImobitechDao.Repositories
{
    public class PessoaRepository : BaseRepository<Pessoa>, IPessoaRepository
    {
        #region Implementação obrigatoria da classe base
        public PessoaRepository(ImobitechEntities context) : base(context) { }

        protected override string TableName
        {
            get { return "Pessoa"; }
        }

        protected override string EntitySetName
        {
            get { return "Pessoa"; }
        }
        #endregion

        public Pessoa retornaPerfil(int id, string _papel)
        {
            return (from p in _context.Pessoa  //.Include("Pessoa_Papel").Include("Pessoa_Papel.Dados_Pessoa_Papel").Include("Pessoa_Papel.Papel")
                    join pp in _context.Pessoa_Papel on p.Id equals pp.Pessoa.Id
                    join pa in _context.Papel on pp.Papel.Id equals pa.Id
                    where pa.Nome == _papel && p.Id == id
                    select p).First();
        }

        public Pessoa login(string login, string senha)
        {
            return (from p in _context.Pessoa
                    where p.Login == login && p.password == senha
                    select p).FirstOrDefault();
        }

        public List<Pessoa> retornaFuncionarios()
        {
            IQueryable<Pessoa> busca = (from p in _context.Pessoa  //.Include("Pessoa_Papel").Include("Pessoa_Papel.Dados_Pessoa_Papel").Include("Pessoa_Papel.Papel")
                                         join pp in _context.Pessoa_Papel on p.Id equals pp.Pessoa.Id
                                         join pa in _context.Papel on pp.Papel.Id equals pa.Id
                                         where pa.Nome == "Funcionario" || pa.Nome == "Corretor" || pa.Nome == "Gerente"
                                         select p).AsQueryable();
            ObjectQuery oQuery = (ObjectQuery)busca;
            string cmdSQL = oQuery.ToTraceString();

            return (from p in _context.Pessoa  //.Include("Pessoa_Papel").Include("Pessoa_Papel.Dados_Pessoa_Papel").Include("Pessoa_Papel.Papel")
                    join pp in _context.Pessoa_Papel on p.Id equals pp.Pessoa.Id
                    join pa in _context.Papel on pp.Papel.Id equals pa.Id
                    where pa.Nome == "Funcionario" || pa.Nome == "Corretor" || pa.Nome == "Gerente"
                    select p).ToList();
        }
    }
}
